<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>流星雨背景</title>
    <style type="text/css">
        body {
            background-color: black;
            z-index: 1;
        }
        body, html {
            width: 100%;
            height: 100%;
            overflow: hidden;
        }
        .text {
            color:red ;
            font-size: 130px;
            text-align: center;
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            z-index: 333;
            font-family: "黑体";
            font-weight: bold;
            line-height: 12s;
            width: 100%;
            animation: blink 3s infinite;
            animation-timing-function: linear;
            animation-direction: alternate;
            animation-iteration-count: infinite;
            animation-delay: 2.5s;
            animation-fill-mode: forwards;
            animation-play-state: runnsing;
            box-shadow: iwnset 0 0 10px rgb(255, 255, 255);
            text-shadow: 0 0 10px rgb(255, 255, 255);
        }
        @keyframes blink {
            0% {
                opacity: 1;
            }
            50% {
                opacity: 0;
            }
            100% {
                opacity: 1;
            }
        }
    </style>
</head>
<body>
    <canvas id="stars"></canvas>
    <div class="text">
        私信免费送
    </div>
    <script>
        var context;
        var arr = [];
        var starCount = 10000;
        var rains = [];
        var rainCount = 20;

        function init() {
            var stars = document.getElementById("stars");
            windowWidth = window.innerWidth;
            stars.width = windowWidth;
            stars.height = window.innerHeight;
            context = stars.getContext("2d");
        }

        var Star = function () {
            this.x = windowWidth * Math.random();
            this.y = 5000 * Math.random();
            this.text = ".";
            this.color = "white";
            this.getColor = function () {
                var _r = Math.random();
                if (_r < 0.5) {
                    this.color = "#333";
                } else {
                    this.color = "white";
                }
            }
            this.init = function () {
                this.getColor();
            }
            this.draw = function () {
                context.fillStyle = this.color;
                context.fillText(this.text, this.x, this.y);
            }
        }

        function drawMoon() {
            var moon = new Image();
            moon.src = "./images/moon.jpg";
            moon.onload = function() {
                context.drawImage(moon, -5, -10);
            }
        }

        var MeteorRain = function () {
            this.x = -1;
            this.y = -1;
            this.length = -1;
            this.angle = 30;
            this.width = -1;
            this.height = -1;
            this.speed = 1;
            this.offset_x = -1;
            this.offset_y = -1;
            this.alpha = 1;
            this.color1 = "";
            this.color2 = "";
            this.init = function () {
                this.getPos();
                this.alpha = 1;
                this.getRandomColor();
                var x = Math.random() * 80 + 150;
                this.length = Math.ceil(x);
                this.angle = 30;
                x = Math.random() + 0.5;
                this.speed = Math.ceil(x);
                var cos = Math.cos(this.angle * Math.PI / 180);
                var sin = Math.sin(this.angle * Math.PI / 180);
                this.width = this.length * cos;
                this.height = this.length * sin;
                this.offset_x = this.speed * cos;
                this.offset_y = this.speed * sin;
            }
            this.getRandomColor = function () {
                var a = Math.ceil(255 - 240 * Math.random());
                this.color1 = "rgba(" + a + "," + a + "," + a + ",1)";
                this.color2 = "black";
            }
            this.countPos = function () {
                this.x = this.x - this.offset_x;
                this.y = this.y + this.offset_y;
            }
            this.getPos = function () {
                this.x = Math.random() * window.innerWidth;
                this.y = Math.random() * window.innerHeight;
            }
            this.draw = function () {
                context.save();
                context.beginPath();
                context.lineWidth = 1;
                context.globalAlpha = this.alpha;
                var line = context.createLinearGradient(this.x, this.y, this.x + this.width, this.y - this.height);
                line.addColorStop(0, "white");
                line.addColorStop(0.3, this.color1);
                line.addColorStop(0.6, this.color2);
                context.strokeStyle = line;
                context.moveTo(this.x, this.y);
                context.lineTo(this.x + this.width, this.y - this.height);
                context.closePath();
                context.stroke();
                context.restore();
            }
            this.move = function () {
                context.clearRect(this.x + this.width - this.offset_x, this.y - this.height, this.offset_x + 5, this.offset_y + 5);
                this.countPos();
                this.alpha -= 0.002;
                this.draw();
            }
        }

        window.onload = function () {
            init();
            for (var i = 0; i < starCount; i++) {
                var star = new Star();
                star.init();
                star.draw();
                arr.push(star);
            }
            for (var i = 0; i < rainCount; i++) {
                var rain = new MeteorRain();
                rain.init();
                rain.draw();
                rains.push(rain);
            }
            drawMoon();
            playStars();
            playRains();
        }

        function playStars() {
            for (var n = 0; n < starCount; n++) {
                arr[n].getColor();
                arr[n].draw();
            }
            setTimeout(playStars, 100);
        }

        

        function playRains() {
            for (var n = 0; n < rainCount; n++) {
                var rain = rains[n];
                rain.move();
                if (rain.y > window.innerHeight) {
                    context.clearRect(rain.x, rain.y - rain.height, rain.width, rain.height);
                    rains[n] = new MeteorRain();
                    rains[n].init();
                }
            }
            setTimeout(playRains, 2);
        }
        
        
        
    </script>
</body>
</html>